//引入服务器地址
import host from "./env";
//引入请求库
import axios from "axios";
//引入element组件
import { ElMessage } from 'element-plus'

import { getUser  } from "./session";

//创建axios实例
const instance = axios.create({
    baseURL: host, //服务器地址
    timeout: 5000, //超时时间，单位是毫秒
    withCredentials:false
})
//添加请求拦截器
instance.interceptors.request.use(function(config){
    //在发送请求前要做什么
    let user = getUser();
    if(user){
        //如果用户存在 增加token
        config.headers["token"]=user.token;
    }
    return config;
},function(error){
    //对错误请求要做些什么
    return Promise.reject(error);
});


//添加响应拦截器
instance.interceptors.response.use(
    function (response) {
        // 2xx 范围内的状态码都会触发该函数，
        //对响应数据做点什么
        if (response.status == 200) {
            //说明接口正常
            //获取接口放回的数据
            let rs = response.data;

            if (rs.code == 0) {
                if (rs.data) {
                    //说明验证失败
                    //遍历js对象
                    let str = "";
                    for (let o in rs.data) {
                        str += rs.data[o] + " <br>";
                    }
                    ElMessage({
                      type:'error',
                      dangerouslyUseHTMLString:true,
                      message:str  
                    })
                } else {
                    //接口放回的错误
                    ElMessage.error(rs.msg)
                }
            }
            //将接口数据封装成promise对象
            return Promise.resolve(rs);
        }
        return Promise.resolve({code:0,msg:"http请求错误"});
    },
    function(error){
        //超出2xx 范围的状态码都会触发该函数
        //对响应错误做点什么
        return Promise.reject(error);
    }
);

//暴露请求方法 将对象赋值给变量default 供其他 模块引用
export default{
    /**
     * get 请求
     * @param {*} url 请求相对路径 
     * @param {*} params  传递的参数 json对象
     * @returns 
     */
    get(url,params){
        return instance.get(url,
            {params,//等价于 params:params
        });
    },
    /**
     * post 请求
     * @param {*} url 
     * @param {*} data 
     * @returns 
     */
    post(url,data){
        return instance.post(url,data);
    },
    /**
     * put 请求 跟新
     * @param {*} url 
     * @param {*} data 
     * @returns 
     */
    put(url,data){
        return instance.put(url,data);
    },

    delete(url,params){
        return instance.delete(url,{params});
    },

    pagePost(url,data){
        return instance.post(url,data,{headers:{'Content-Type':'multipart/form-data'}});
    },

    userLogin(url,data){
        return instance.post(url,data,{headers:{'Content-Type':'multipart/form-data'}})
    }
};

